﻿using System;
using System.Linq;
using System.Reflection;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
using SimpleInjector;
using YetAnotherChat.BackendCore.Injector;

namespace YetAnotherChat.ChatUI
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterDependencyInjector();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
        }

        private void RegisterDependencyInjector()
        {
            var container = new Container();
            var injectorType = typeof(IInjector);
            var types = AppDomain.CurrentDomain.GetAssemblies().ToList().SelectMany(a => a.GetTypes()).Where(injectorType.IsAssignableFrom).Where(x => x.IsClass);

            var registerComponents = types.Select(Activator.CreateInstance).OfType<IInjector>();
            foreach (var registerComponent in registerComponents)
            {
                registerComponent.RegisterInjector(container);
            }

            container.Verify();
            DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
        }
    }
}